SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE Proc [dbo].[SP_TXMVTO_CNTB_I17]        
/*------------------------------------------------------------*/        
/*----- Empresa          : OFISIS S.A.                    ----*/        
/*----- Cliente          : OFISIS S.A.                    ----*/        
/*----- Sistema          : Contabilidad                   ----*/        
/*----- Modulo           : Empresa                        ----*/        
/*----- Programa         : Distribucion O/Servicio        ----*/        
/*----- Script           : TXMVTO_CNTB                    ----*/        
/*----- Nombre           : SP_TXMVTO_CNTB_I17             ----*/        
/*----- Desarrollado por : Martin Garcia Farfan           ----*/        
/*----- Fecha            : 06/07/2000                     ----*/        
/*----- Base de Datos    : MS SQL Server                  ----*/        
/*----- Version          : 7.0                            ----*/        
/*----- Invoca a SP      :                                ----*/        
/*------------------------------------------------------------*/        
/*------------------------------------------------------------*/        
/*----- MODIF: PERCY GARCIA                               ----*/         
/*----- FECHA: 26/03/2004                                 ----*/        
/*----- DETALLE: GRABAR ST_IMPR_CHEQ COMO 'N', TRUNCA FE_ASTO_CNTB--*/        
/*------------------------------------------------------------*/        
/*------------------------------------------------------------*/      
/*----- Modificado 3 por : percy garcia                  -----*/      
/*----- Fecha Modifica   : 05/06/2004                    -----*/      
/*----- Detalle Modifica : usuario creacion y modif      -----*/      
/*------------------------------------------------------------*/      
/*---------------------------------------------------------------------*/      
/*----- Modificado 4 por : percy garcia                           -----*/      
/*----- Fecha Modifica   : 02/03/2006                             -----*/      
/*----- Detalle Modifica : SE COLOCO NULLIF PARA LOS CAMPOS DE AUXILIARES Y ORDEN DE SERVICIO   -----*/      
/*---------------------------------------------------------------------*/        
/*---------------------------------------------------------------------*/      
/*----- Modificado 5 por : percy garcia                           -----*/      
/*----- Fecha Modifica   : 18/05/2006                             -----*/      
/*----- Detalle Modifica : no considera otras operaciones de distribucion en cursor-----*/      
/*---------------------------------------------------------------------*/        
/*------------------------------------------------------------*/        
/*----- Drop proc SP_TXMVTO_CNTB_I17                      ----*/        
/*----- Grant all on SP_TXMVTO_CNTB_I17 to public         ----*/        
/*----- SP_TXMVTO_CNTB_I17 '01', 1, '001', '025', 2000, 2 ----*/        
/*------------------------------------------------------------*/              
@ISCO_EMPR         TD_VC_002,        
@ISCO_USUA          TD_VC_008,    
@IDFE_USUA          TD_DT_001,    
@INNU_CNTB_EMPR    TD_IN_001,        
@ISCO_UNID_CNTB    TD_VC_003,        
@ISCO_OPRC_ANTE    TD_VC_003,        
@INNU_ANNO         TD_IN_004_ANNO,        
@INNU_MESE         TD_IN_002_MESE        
        
As        
         
 Begin tran SP_TXMVTO_CNTB_I17        
        
 Declare        
  @CSCO_CNTA_EMPR   TD_VC_020_CNTA,        
  @CSTI_AUXI_EMPR   TD_VC_001,        
  @CSCO_AUXI_EMPR   TD_VC_020,        
  @CSCO_ORDE_SERV   TD_VC_020,        
  @CSCO_ORDE_DEST   TD_VC_020,        
  @CNIM_MVTO_DIST   TD_NU_016_004,        
  @CNIM_MVTO_CNTB   TD_NU_016_004,        
  @VSCO_OPRC_CNTB   TD_VC_003,        
  @VSNU_ASTO        TD_VC_010,        
  @VNNU_SECU        TD_IN_002,        
  @VSCO_MONE        TD_VC_003,        
  @VSTI_OPER        TD_VC_003,         
  @VSDE_GLOS        TD_VC_100,        
  @VNIM_TOTA        TD_NU_016_004,        
  @VSCO_CADE_0001   TD_VC_100,        
  @VSCO_CADE_0002   TD_VC_100,        
  @VNNU_ASTO        TD_IN_001,        
  @VSCO_CNTA_TEMP   TD_VC_020_CNTA,        
  @VSTI_AUXI_TEMP   TD_VC_001,        
  @VSCO_AUXI_TEMP   TD_VC_020,         
  @VSCO_ORDE_TEMP   TD_VC_020,         
  @VNIM_MVTO_TEMP   TD_NU_016_004,        
  @VNNU_ULTI_ASTO   TD_IN_001,        
-- Nuevas Variables        
  @VSID_GANA_REDO   TD_VC_003,        
  @VSID_PERD_REDO   TD_VC_003,        
  @VSCO_GANA_REDO   TD_VC_020,        
  @VSCO_PERD_REDO   TD_VC_020,        
  @VNNU_FACT_REDO   TD_NU_015_006,        
  @VNTO_SALD        TD_NU_016_004,        
  @VDFE_ASTO_CNTB   TD_DT_001,   


  @VSCO_OPRC_AUXI   TD_VC_003,
  @VSCO_OPRC_CNTA   TD_VC_003


-- AUXILIAR 
Select @VSCO_OPRC_AUXI = ''
Select @VSCO_OPRC_AUXI = IsNull(CO_OPRC_CNTB,'') 
From TTIDEN_OPER 
Where CO_EMPR = @ISCO_EMPR 
And NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And ID_OPRC = '022'         

-- CUENTA
Select @VSCO_OPRC_CNTA = ''
Select @VSCO_OPRC_CNTA = IsNull(CO_OPRC_CNTB,'') 
From TTIDEN_OPER 
Where CO_EMPR = @ISCO_EMPR 
And NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And ID_OPRC = '032'     
             
Declare CU_TXMVTO_CNTB_I17_1 Cursor        
 For        
  Select t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR, t2.CO_ORDE_SERV, t1.CO_ORDE_DEST,         
         Round((max(t1.PO_DIST) * Isnull(sum(PATINDEX(t2.TI_OPER,'CAR') * Isnull(t2.IM_MVTO_CNTB, 0) - PATINDEX(t2.TI_OPER,'ABO') * Isnull(t2.IM_MVTO_CNTB, 0)), 0)) / 100, 2),        
         Round(Isnull(sum(PATINDEX(t2.TI_OPER,'CAR') * Isnull(t2.IM_MVTO_CNTB, 0) - PATINDEX(t2.TI_OPER,'ABO') * Isnull(t2.IM_MVTO_CNTB, 0)), 0),2)         
   from TTORDE_DIST t1, TXMVTO_CNTB t2        
  where t1.CO_EMPR = @ISCO_EMPR and        
        t1.NU_ANNO = @INNU_ANNO and        
        t1.NU_MESE = @INNU_MESE and        
        t2.CO_EMPR = t1.CO_EMPR and        
        t2.NU_CNTB_EMPR = @INNU_CNTB_EMPR and        
        t2.CO_OPRC_CNTB Not In (@VSCO_OPRC_AUXI, @VSCO_OPRC_CNTA) and          
        t2.NU_ANNO = t1.NU_ANNO and        
        t2.NU_MESE = t1.NU_MESE and        
        t2.CO_ORDE_SERV = t1.CO_ORDE_ORIG And         
        t2.SI_MVTO_CNTB = 'APR'        
  group by t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR,         
           t2.CO_ORDE_SERV, t1.CO_ORDE_DEST        
  order by t2.CO_CNTA_EMPR, t2.TI_AUXI_EMPR, t2.CO_AUXI_EMPR,         
t2.CO_ORDE_SERV, t1.CO_ORDE_DEST        
        
 Select  @VSCO_MONE = CO_MONE,        
         @VNNU_FACT_REDO = NU_FACT_REDO,         
  @VSID_GANA_REDO = ID_GANA_REDO,         
  @VSID_PERD_REDO = ID_PERD_REDO        
   from TTCNTB_EMPR        
 where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR        
        
 Select @VSCO_OPRC_CNTB = CO_OPRC_CNTB        
   from TTIDEN_OPER        
  where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR        
   and ID_OPRC = '023'        
        
 Select @VSCO_GANA_REDO = CO_CNTA_EMPR        
   from TTIDEN_CNTA   where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR    and ID_CNTA = @VSID_GANA_REDO        
        
 Select @VSCO_PERD_REDO = CO_CNTA_EMPR        
   from TTIDEN_CNTA   where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR    and ID_CNTA = @VSID_PERD_REDO        
        
 Delete TXMVTO_CNTB        
  where CO_EMPR = @ISCO_EMPR        
  and NU_CNTB_EMPR = @INNU_CNTB_EMPR        
  and CO_OPRC_CNTB = @VSCO_OPRC_CNTB        
  and NU_ANNO = @INNU_ANNO        
  and NU_MESE = @INNU_MESE        
        
  if @@error <> 0        
   Begin        
    Rollback Tran SP_TXMVTO_CNTB_I17        
    Return        
   End        
        
-- Elimino los asientos Distribucion O/Servicio         
 Update TCFECH_PROC        
  set NU_ULTI_ASTO = 0,  
  CO_USUA_MODI =  @ISCO_USUA,  
  FE_USUA_MODI  = @IDFE_USUA  
  where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR        
  -- and CO_UNID_CNTB = @ISCO_UNID_CNTB        
   and CO_OPRC_CNTB = @VSCO_OPRC_CNTB        
   and NU_ANNO = @INNU_ANNO        
   and NU_MESE = @INNU_MESE        
        
  if @@error <> 0        
   Begin        
    Rollback Tran SP_TXMVTO_CNTB_I17        
    Return        
   End     
        
 Set @VNNU_SECU = 1        
 Set @VNNU_ASTO = 1        
 Set @VSDE_GLOS = 'ASIENTO DISTRIBUCION ORDEN DE SERVICIO'        
 SELECT @VDFE_ASTO_CNTB = getdate()        
        
 Open CU_TXMVTO_CNTB_I17_1        
 Fetch CU_TXMVTO_CNTB_I17_1 into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR,         
   @CSCO_AUXI_EMPR, @CSCO_ORDE_SERV, @CSCO_ORDE_DEST, @CNIM_MVTO_DIST, @CNIM_MVTO_CNTB        
         
 Set @VSCO_CADE_0001 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(@CSTI_AUXI_EMPR)) +         
                       Rtrim(ltrim(@CSCO_AUXI_EMPR)) + Rtrim(ltrim(@CSCO_ORDE_SERV))        
        
 Set @VSCO_CADE_0002 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(@CSTI_AUXI_EMPR)) +         
                       Rtrim(ltrim(@CSCO_AUXI_EMPR)) + Rtrim(ltrim(@CSCO_ORDE_SERV))        
 If @@Fetch_Status = 0        
 Begin        
 While @@Fetch_Status = 0        
  Begin        
        
  Set @VSCO_CADE_0001 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(@CSTI_AUXI_EMPR)) +         
                        Rtrim(ltrim(@CSCO_AUXI_EMPR)) + Rtrim(ltrim(@CSCO_ORDE_SERV))        
        
   If @VSCO_CADE_0001 != @VSCO_CADE_0002        
    Begin        
           
    if @VNIM_MVTO_TEMP > 0        
     Set @VSTI_OPER = 'ABO'        
    Else        
     Set @VSTI_OPER = 'CAR'         
           
    Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,        
         NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,        
         TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,        
         TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,        
         NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,        
         CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,         
         ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)  
     Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,         
         @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @VSCO_CNTA_TEMP, NullIf(Rtrim(@VSTI_AUXI_TEMP),''),        
         NullIf(Rtrim(@VSCO_AUXI_TEMP),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,        
         1.000000, 1.000000, @VSTI_OPER, Abs(@VNIM_MVTO_TEMP), Abs(@VNIM_MVTO_TEMP), @VSDE_GLOS, NULL, NULL, NULL,        
         NULL, NULL, NULL, NullIf(Rtrim(@VSCO_ORDE_TEMP),''), 'APR',         
         NULL, NULL, NULL, NULL, NULL, NULL,        
         'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)        
         
      if @@error <> 0        
        Begin        
          close CU_TXMVTO_CNTB_I17_1        
          deallocate CU_TXMVTO_CNTB_I17_1        
          Rollback Tran SP_TXMVTO_CNTB_I17        
          Return        
        End        
        
      Exec SP_TXMVTO_CNTB_I25 @ISCO_EMPR, @ISCO_USUA , @IDFE_USUA, @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,        
  @VSCO_OPRC_CNTB,@INNU_ANNO,@INNU_MESE,@VSNU_ASTO        
        
     Set @VNNU_ASTO = @VNNU_ASTO + 1           
     Set @VNNU_SECU = 1        
                
     Set @VSCO_CADE_0002 = Rtrim(ltrim(@CSCO_CNTA_EMPR)) + Rtrim(ltrim(@CSTI_AUXI_EMPR)) +         
                           Rtrim(ltrim(@CSCO_AUXI_EMPR)) + Rtrim(ltrim(@CSCO_ORDE_SERV))        
    End          
        
    if @CNIM_MVTO_DIST > 0        
     Set @VSTI_OPER = 'CAR'        
    Else            
     Set @VSTI_OPER = 'ABO'        
        
   Select @VSNU_ASTO = substring('0000000000', 1, 10 - datalength(rtrim(ltrim(convert(varchar, @VNNU_ASTO))))) +         
      convert(varchar, @VNNU_ASTO)        
        
    Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,        
         NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,        
         TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,        
         TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,        
         NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,         
         CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,         
         ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)  
    Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,         
         @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @CSCO_CNTA_EMPR, NullIf(Rtrim(@CSTI_AUXI_EMPR),''),         
         NullIf(Rtrim(@CSCO_AUXI_EMPR),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,        
         1.000000, 1.000000, @VSTI_OPER, Abs(@CNIM_MVTO_DIST), Abs(@CNIM_MVTO_DIST), @VSDE_GLOS, NULL, NULL, NULL,        
         NULL, NULL, NULL, NullIf(Rtrim(@CSCO_ORDE_DEST),''), 'APR',         
         NULL, NULL, NULL, NULL, NULL, NULL,        
         'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)  
        
      if @@error <> 0        
        Begin        
          close CU_TXMVTO_CNTB_I17_1        
          deallocate CU_TXMVTO_CNTB_I17_1        
          Rollback Tran SP_TXMVTO_CNTB_I17        
          Return        
        End        
        
    Set @VNNU_SECU = @VNNU_SECU + 1        
    Set @VSCO_CNTA_TEMP = @CSCO_CNTA_EMPR        
    Set @VSTI_AUXI_TEMP = @CSTI_AUXI_EMPR        
    Set @VSCO_AUXI_TEMP = @CSCO_AUXI_EMPR        
    Set @VSCO_ORDE_TEMP = @CSCO_ORDE_SERV        
    Set @VNIM_MVTO_TEMP = @CNIM_MVTO_CNTB        
         
        
   Fetch CU_TXMVTO_CNTB_I17_1 into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR,         
     @CSCO_AUXI_EMPR, @CSCO_ORDE_SERV, @CSCO_ORDE_DEST, @CNIM_MVTO_DIST, @CNIM_MVTO_CNTB        
 End         
        
  if @CNIM_MVTO_CNTB > 0        
   Set @VSTI_OPER = 'ABO'        
  Else        
   Set @VSTI_OPER = 'CAR'         
          
  Insert into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, NU_ANNO,        
    NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB, CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR,        
    TI_DOCU, NU_DOCU, FE_DOCU, FE_DOCU_VENC, TI_CAMB, CO_MONE, FA_CAMB, FA_CAMB_DIAR,        
    TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS, TI_DOCU_REFE, NU_DOCU_REFE, FE_DOCU_REFE,        
    NO_GIRA, FE_ENTR_CHEQ, FE_PROG_CHEQ, CO_ORDE_SERV, SI_MVTO_CNTB,         
    CO_UNID_ORIG, CO_OPRC_ORIG, NU_ASTO_ORIG, ST_OTRS, NU_PROC, NU_PROC_SECU,         
    ST_IMPR_CHEQ, ST_FLAG, ST_GEST, ST_REDO, CO_USUA_MODI, FE_USUA_MODI, CO_USUA_CREA, FE_USUA_CREA)  
  Values(@ISCO_EMPR, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_CNTB, @INNU_ANNO,         
    @INNU_MESE, @VSNU_ASTO, @VNNU_SECU, Convert(DateTime, Convert(Varchar, getdate(), 103), 103), @VSCO_CNTA_TEMP, NullIf(Rtrim(@VSTI_AUXI_TEMP),''),        
    NullIf(Rtrim(@VSCO_AUXI_TEMP),''), NULL, NULL, NULL, NULL, 'PAC',  @VSCO_MONE,        
    1.000000, 1.000000, @VSTI_OPER, Abs(@VNIM_MVTO_TEMP), Abs(@VNIM_MVTO_TEMP), @VSDE_GLOS, NULL, NULL, NULL,        
    NULL, NULL, NULL, NullIf(Rtrim(@VSCO_ORDE_TEMP),''), 'APR', NULL, NULL, NULL, NULL, NULL, NULL,        
    'N', NULL, 'N', 'N', @ISCO_USUA , @IDFE_USUA, @ISCO_USUA, @IDFE_USUA)  
            
    if @@error <> 0        
     Begin        
      close CU_TXMVTO_CNTB_I17_1        
      deallocate CU_TXMVTO_CNTB_I17_1        
      Rollback Tran SP_TXMVTO_CNTB_I17        
      Return        
     End        
        
    Exec SP_TXMVTO_CNTB_I25 @ISCO_EMPR, @ISCO_USUA , @IDFE_USUA, @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,        
  @VSCO_OPRC_CNTB,@INNU_ANNO,@INNU_MESE,@VSNU_ASTO        
        
close CU_TXMVTO_CNTB_I17_1        
deallocate CU_TXMVTO_CNTB_I17_1        
        
 Update TCFECH_PROC        
   set NU_ULTI_ASTO = @VNNU_ASTO,  
    CO_USUA_MODI =  @ISCO_USUA,  
    FE_USUA_MODI  = @IDFE_USUA  
  where CO_EMPR = @ISCO_EMPR        
   and NU_CNTB_EMPR = @INNU_CNTB_EMPR        
   and CO_UNID_CNTB = @ISCO_UNID_CNTB        
   and CO_OPRC_CNTB = @VSCO_OPRC_CNTB        
   and NU_ANNO = @INNU_ANNO        
   and NU_MESE = @INNU_MESE        
        
   if @@error <> 0        
    Begin        
     Rollback Tran SP_TXMVTO_CNTB_I17        
     Return        
    End        
End        
Else        
Begin        
     close CU_TXMVTO_CNTB_I17_1        
     deallocate CU_TXMVTO_CNTB_I17_1        
End        
commit tran SP_TXMVTO_CNTB_I17        
return        
/*------------------------- Fin ------------------------------*/





GO
